MySQL Java - MYSQL教程

MySQL Java 连接与使用

MySQL 是最流行的开源关系型数据库之一,而 Java 是企业级应用开发中最常用的编程语言。将 Java 与 MySQL 结合使用,可以构建强大的数据驱动型应用程序。

本文将详细介绍如何在 Java 程序中连接和使用 MySQL 数据库,包括:

本文介绍了 Java 连接和使用 MySQL 数据库的基本步骤,包括:

  • 加载 JDBC 驱动
  • 建立数据库连接
  • 执行 SQL 查询和更新
  • 使用 PreparedStatement 防止 SQL 注入
  • 事务管理
  • 资源关闭
  • 最佳实践

准备工作

下载 MySQL JDBC 驱动

Java 通过 JDBC (Java Database Connectivity) 技术与数据库交互。要连接 MySQL,你需要下载 MySQL Connector/J 驱动:

  1. 访问 MySQL Connector/J 下载页面
  2. 选择与你的 Java 版本兼容的驱动版本
  3. 下载 JAR 文件(如 mysql-connector-java-8.0.xx.jar)

将驱动添加到项目

根据你使用的开发工具或构建工具(如 Eclipse、IntelliJ IDEA、Maven 或 Gradle),将下载的 JAR 文件添加到项目的类路径中。


建立数据库连接

加载驱动程序

在 Java 代码中,首先需要加载 MySQL JDBC 驱动:

示例代码
try{Class.forName("com.mysql.cj.jdbc.Driver");}catch(ClassNotFoundExceptione){System.out.println("MySQL JDBC 驱动未找到");e.printStackTrace();}

创建连接

使用 DriverManager.getConnection() 方法建立与数据库的连接:

示例代码
Stringurl="jdbc:mysql://localhost:3306/你的数据库名?useSSL=false&serverTimezone=UTC";Stringusername="你的用户名";Stringpassword="你的密码";try{Connectionconnection=DriverManager.getConnection(url, username, password);System.out.println("数据库连接成功!");}catch(SQLExceptione){System.out.println("数据库连接失败");e.printStackTrace();}

3.2.1 连接参数说明

  • jdbc:mysql://localhost:3306/ :MySQL 服务器的默认地址和端口
  • useSSL=false :禁用 SSL 连接(开发环境)
  • serverTimezone=UTC :设置服务器时区,避免时区问题

执行 SQL 操作

创建 Statement 对象

Statement 对象用于执行静态 SQL 语句:

示例代码
Statementstatement=connection.createStatement();

执行查询

使用 executeQuery() 方法执行 SELECT 语句:

示例代码
Stringsql="SELECT * FROM 表名";ResultSetresultSet=statement.executeQuery(sql);while(resultSet.next()){intid=resultSet.getInt("id");Stringname=resultSet.getString("name");System.out.println("ID: "+id+", Name: "+name);}

执行更新

使用 executeUpdate() 方法执行 INSERT、UPDATE 或 DELETE 语句:

示例代码
StringinsertSQL="INSERT INTO 表名 (列1, 列2) VALUES ('值1', '值2')";introwsAffected=statement.executeUpdate(insertSQL);System.out.println("影响的行数: "+rowsAffected);

使用 PreparedStatement

PreparedStatement 可以防止 SQL 注入,提高性能:

示例代码
Stringsql="INSERT INTO users (name, email) VALUES (?, ?)";PreparedStatementpreparedStatement=connection.prepareStatement(sql);preparedStatement.setString(1,"张三");preparedStatement.setString(2,"[email protected]");introwsInserted=preparedStatement.executeUpdate();System.out.println("插入的行数: "+rowsInserted);

事务管理

基本概念

事务是一组要么全部成功要么全部失败的 SQL 操作。

事务操作示例

示例代码
try{// 关闭自动提交connection.setAutoCommit(false);// 执行多个 SQL 操作statement.executeUpdate("UPDATE accounts SET balance = balance - 100 WHERE id = 1");statement.executeUpdate("UPDATE accounts SET balance = balance + 100 WHERE id = 2");// 提交事务connection.commit();System.out.println("事务执行成功");}catch(SQLExceptione){// 发生错误时回滚connection.rollback();System.out.println("事务执行失败,已回滚");e.printStackTrace();}finally{// 恢复自动提交connection.setAutoCommit(true);}

关闭资源

为什么需要关闭资源

数据库连接是有限的资源,使用后必须关闭以避免资源泄漏。

如何正确关闭资源

示例代码
try{if(resultSet!=null)resultSet.close();if(statement!=null)statement.close();if(connection!=null)connection.close();}catch(SQLExceptione){e.printStackTrace();}

6.3 使用 try-with-resources

Java 7+ 可以使用 try-with-resources 自动关闭资源:

示例代码
try(Connectionconn=DriverManager.getConnection(url, username, password);Statementstmt=conn.createStatement();ResultSetrs=stmt.executeQuery("SELECT * FROM users")){while(rs.next()){// 处理结果}}catch(SQLExceptione){e.printStackTrace();}

最佳实践

使用连接池

生产环境中应使用连接池(如 HikariCP、c3p0)管理数据库连接:

示例代码
// HikariCP 示例HikariConfig config=newHikariConfig();config.setJdbcUrl("jdbc:mysql://localhost:3306/你的数据库");config.setUsername("用户名");config.setPassword("密码");HikariDataSource dataSource=newHikariDataSource(config);Connectionconnection=dataSource.getConnection();

处理异常

正确处理 SQL 异常,提供有意义的错误信息:

示例代码
try{// 数据库操作}catch(SQLExceptione){System.err.println("SQL 错误: "+e.getMessage());System.err.println("SQL 状态: "+e.getSQLState());System.err.println("错误代码: "+e.getErrorCode());}

7.3 使用 DAO 模式

将数据访问逻辑封装在 Data Access Object (DAO) 中,提高代码的可维护性:

示例代码
publicclassUserDao{privateConnectionconnection;publicUserDao(Connectionconnection){this.connection=connection;}publicUser getUserById(intid)throwsSQLException{Stringsql="SELECT * FROM users WHERE id = ?";try(PreparedStatementstmt=connection.prepareStatement(sql)){stmt.setInt(1, id);ResultSetrs=stmt.executeQuery();if(rs.next()){returnnewUser(rs.getInt("id"), rs.getString("name"));}}returnnull;}}

通过掌握这些基础知识,你已经可以开始在 Java 应用程序中使用 MySQL 数据库了。随着经验的积累,你可以进一步学习更高级的主题,如连接池、ORM 框架(如 Hibernate、MyBatis)等。